home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / PROGRAM / TP121392.ARJ / 12-13-92.TPC
Text File  |  1992-12-13  |  53KB  |  1,617 lines

  1.  
  2. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  3.  
  4. Conference 4
  5. Date       12-07-92 07:00:22
  6. From       Trevor Carlsen
  7. To         Gregory P. Smith
  8. Subject    30/11/92 Contest
  9.  
  10.  
  11.  
  12.  
  13.  TC> The code submitted must be compilable using TP6 or TP7 using
  14.  TC> standard Borland units and must be adequately commented or
  15.  TC> documented.
  16.  
  17.  GS> Does this mean that it has to compile under both?  Otherwise
  18.  GS> would we be allowed to use TP/BP 7's new Strings unit?
  19.  
  20. No, it does not need to compile under both versions. As long as it compiles
  21. under one or the other and will run on an 8088, you may use any unit supplied
  22. by Borland with the standard package.
  23.  
  24. Good luck,
  25.  
  26.   TeeCee
  27.  
  28. --- TC-ED   v2.01  
  29.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  30.  * Tossed by SFToss/286 v1.02a on 92/12/08  08:26:33
  31.  
  32. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  33.  
  34. Conference 4
  35. Date       12-07-92 07:17:11
  36. From       Trevor Carlsen
  37. To         Bob Swart
  38. Subject    Contest
  39.  
  40.  
  41.  
  42.  BS> Today I have send you a 720K disk with my (first)
  43.  BS> submission, called BOBSORT version 1.0 (always modest, this
  44.  BS> guy ;-). It sorts up to 1,048,575 strings.
  45.  
  46. Top stuff!!  I await it with interest.
  47.  
  48.  BS> Once you have received my disk, could you please return it
  49.  BS> with *your* program on it? Also, could you post my results
  50.  BS> on your machine (I don't care if anybody else knows how I'm
  51.  BS> doing, so if you want you can just put it in this area ...
  52.  
  53. I will be happy to do this for you or anybody else for that matter.  It may
  54. not happen overnight however as I am very fully occupied at the present time
  55. with negotiations on the purchase of another business.  If the negotiations
  56. come off I will also be moving house and so may be absent from the echo for
  57. a week or two.
  58.  
  59. I will keep the echo participants fully informed of my new telephone numbers,
  60. address etc if it becomes necessary to do so.
  61.  
  62. TeeCee
  63.  
  64.  
  65. --- TC-ED   v2.01  
  66.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  67.  * Tossed by SFToss/286 v1.02a on 92/12/08  08:26:33
  68.  
  69. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  70.  
  71. Conference 4
  72. Date       12-07-92 20:06:48
  73. From       Trevor Carlsen
  74. To         Steve Connet
  75. Subject    Screen memory
  76.  
  77.  
  78.  
  79.  SC> ...The other day (after I wrote the original message) I
  80.  SC> learned about the MEM function.  So then I thought that it'd
  81.  SC> be easier (and faster) to use this and store it in a buffer.
  82.  SC> No prob... but I never learned about pointers.  The books I
  83.  SC> have on TP that go over pointers are horrific.... no
  84.  SC> straight and simple discussion.  I'd like to ask you about
  85.  SC> what you wrote so I can learn them quickly.  You have:
  86.  
  87.  SC> VAR ScreenBuffer:^Array [0..1999] of Byte;
  88.  
  89.  SC> From what I understand, ScreenBuffer stores a 32-bit address
  90.  SC> that points to the Array and takes up only 4 bytes of
  91.  SC> memory.  Is this right?
  92.  
  93. Yes that is correct.
  94.  
  95.  SC> Now you have:
  96.  
  97.  SC>  for i:=0 to 1999 do
  98.  SC>   ScreenBuffer^[i]:=mem[$B800:i];
  99.  SC>   { Saves screen to ScreenBuffer }
  100.  
  101.  SC> Does the 32-bit address in ScreenBuffer automatically change
  102.  SC> to correspond to the variable i?
  103.  
  104. No it does not.  ScreenBuffer's value remains constant unless the program
  105. specifically changes it; the variable i alters the screen memory location
  106. by indexing an array.
  107.  
  108.  SC> For example, if i=0 ScreenBuffer will hold an address
  109.  SC> pointing to mem[$b800:0] ... but when i=1 will ScreenBuffer
  110.  SC> contain a new 32-bit address that points to mem[$b800:1]?
  111.  
  112. When ScreenBuffer is dereferenced the address refers to the starting address
  113. of an array of 2000 bytes.  The variation in where you are looking occurs
  114. solely by the indexing of that array.
  115.  
  116.  SC> About the video screen: mem[$b800:$0000] contains the
  117.  SC> character and mem[$b800:$0001] contains the attribute for
  118.  SC> offset $0000, and so on. Since 'var i' is a word, it'll hold
  119.  SC> both character & attribute.
  120.  
  121. i is purely being used as an array index variable.  It does not hold anything
  122. other than the index value.
  123.  
  124.  SC> But is 2000 enough to store the entire screen?   I know
  125.  SC> 80x25=2000 ... but I think when I tried it, it only did half
  126.  SC> the screen (in mode 80x25).
  127.  
  128. And here you discover the problem... The 80x25 screen is not made up of 2000
  129. bytes but of 4000. This can be represented by 2000 words or better still of
  130. 2000 2 byte records as demonstrated below.
  131.  
  132. I have quoted almost your whole message as it raises quite a few questions
  133. and for someone just starting out shows a remarkable grasp of the situation.  
  134.  
  135.  
  136. As you have discovered, CP's original advice was wrong. I would have corrected
  137. this at the time but it was so fundamental that I felt sure others would pick
  138. him up on it and I was very busy! :-(
  139.  
  140. The following is a little demonstration that will work and it will demonstrate
  141. what you want. 
  142.  
  143. type
  144.   Video_Cell  = record
  145.                   ch   : char;
  146.                   attr : byte;
  147.                 end;
  148.   Video_Array = array[1..25,1..80] of Video_Cell;
  149.   { better than array[0..1999] of Video_Cell as it permits referencing the }
  150.  
  151.   { screen in exactly the same manner as the GotoXY procedure              }  
  152.  
  153.  
  154.   Video_Ptr   = ^Video_Array;
  155.  
  156. const
  157.   VideoSeg    : array[0..1] of word = ($b800,$b000);
  158.  
  159. var
  160.   Screen      : Video_Ptr;
  161.   BlankScreen,
  162.   SavedScreen : Video_Array;
  163.  
  164. The first thing that must be done is to initialise the pointer that contains
  165. the address in memory where the program expects to find the video screen so
  166. call the following procedure as the first, or one of the first, statements
  167. in your program.
  168.  
  169.   procedure Initialise;
  170.     begin
  171.       Screen := ptr(VideoSeg[LastMode div 7],0);
  172.       FillChar(BlankScreen,sizeof(BlankScreen),0);
  173.     end;
  174.  
  175. Once this is done you can store a screen just by -
  176.  
  177.   SavedScreen := Screen^;
  178.  
  179. Or to restore a saved screen -
  180.  
  181.   Screen^ := SavedScreen;
  182.  
  183. Or to blank or unblank a screen -
  184.  
  185.   procedure BlankOutScreen(blank: boolean);
  186.     begin
  187.       if blank then {blank out the screen } begin
  188.         SavedScreen := Screen^;
  189.         Screen^ := BlankScreen;
  190.       end else { Restore the screen }
  191.         Screen^ := SavedScreen;
  192.     end;
  193.  
  194. I am sure you can play around with that little lot :-).
  195.  
  196.  
  197. TeeCee
  198.         
  199.  
  200.  
  201. --- TC-ED   v2.01  
  202.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  203.  * Tossed by SFToss/286 v1.02a on 92/12/08  08:26:33
  204.  
  205. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  206.  
  207. Conference 4
  208. Date       12-08-92 14:16:53
  209. From       Trevor Carlsen
  210. To         Chris Johnsen
  211. Subject    Registers (video)
  212.  
  213.  
  214.  
  215.  CJ>   type
  216.  CJ>     ScreenPtr=^ScreenType
  217.  CJ>     ScreenType=record
  218.  CJ>                  Pos : array [1..80,1..25] of record
  219.  CJ>                                                 ch : char;
  220.  CJ>                                                 at : byte;
  221.  CJ>                                               end;
  222.  CJ>                end;
  223.  
  224.  
  225. The array declaration is the reverse to what is required. It should be [1..25,1.
  226. 80].  I've always reckoned that gotoXY has its parameters back-to-front. The
  227. above only serves to strengthen that opinion.
  228.  
  229. TeeCee
  230.  
  231. --- TC-ED   v2.01  
  232.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  233.  * Tossed by SFToss/286 v1.02a on 92/12/09  12:56:05
  234.  
  235. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  236.  
  237. Conference 4
  238. Date       12-08-92 14:19:01
  239. From       Trevor Carlsen
  240. To         Todd Blair
  241. Subject    Pointer HeLP
  242.  
  243.  
  244.  
  245.  TB> I would like to know how to remove variables and objects out
  246.  TB> of memory once they are not needed anymore.  I heard that it
  247.  TB> has something to do with pointers.  So, I went to my Tp book
  248.  TB> and looked it up.  I read the whole section on pointers.
  249.  TB> After I was done I couldnt understand a word I had read, I
  250.  TB> read it a second time, but still no luck.  Could some one
  251.  TB> please show me an example of the use of a pointer, and
  252.  TB> explain it.  Thanx I would really appreciate it!
  253.  
  254. A pointer is a variable that contains a memory address.
  255.  
  256. The heap is all of that memory allocated by DOS to a program for its use that
  257. has not been used by the program for its code, global data or stack.
  258.  
  259. Dynamic variables are variables that have had space allocated for them on
  260. the heap. 
  261.  
  262. Dynamic variables have no identifier (are unnamed).  Because of this they
  263. need an associated variable that can be used to find where they reside in
  264. memory. Pointers are ideal for this but need some method to define what type
  265. of data it is that they are pointing at.  Pascal provides this method.
  266.  
  267.   type
  268.     Str10Ptr = ^string[10];
  269.   var
  270.     S : Str10Ptr;
  271.  
  272. In the above example S is a pointer that has been defined as pointing to an
  273. address in memory that will contain (or should contain) data of type string[10].
  274.  
  275. However how does S get this value?  How does it know where that data's address
  276. is supposed to be?  Well until the programmer allocates memory for that data
  277. S's value is undefined, so it could be literally pointing anywhere. So it
  278. is *vital* that before we try to use it to use/assign data from/to that memory
  279. location we give S a memory address that is not being used for any other purpose
  280. at the moment and that is big enough to hold the data that we want to place
  281. into it - in this case at least 11 bytes.  We do this by -
  282.  
  283.   new(S);
  284.  
  285. Pascal has now allocated at least 11 bytes of heap and has allocated S with
  286. the address of the FIRST byte of that allocation.
  287.  
  288. Ok... so far so good! How do we access that data (remembering that it has
  289. no name).  Well we "dereference" the pointer. This is done by placing a carat
  290. sign immediately following the pointer's identifier. 
  291.  
  292.   S^ := 'Todd Blair';
  293.  
  294. To "reference" a dynamic variable we "dereference" its associated pointer
  295. variable.  We cannot say -
  296.  
  297.   S := 'Todd Blair'; 
  298.  
  299. because S is a pointer and that would be trying to give a pointer a string
  300. type value - a compiler "type mismatch" would occur. So every time we wish
  301. to access that dynamic variable we dereference it.
  302.  
  303. To delete the dynamic variable once it is of no further use is just a matter of -
  304.  
  305.  
  306.   dispose(S);
  307.  
  308. What this statement does is make the memory used by S^ available to be used
  309. for other purposes by the program.  It does not erase the contents of that
  310. memory and it does not give S a new value.  However any attempt to dereference
  311. S is an error as the integrity of that memory location has been lost - it
  312. may have been allocated to other data. 
  313.  
  314. Pointers do not *have* to point to a memory location in the heap or even have
  315. their value always allocated by using the New procedure. Any valid memory
  316. address can be assigned to them and then they can be dereferenced as shown
  317. above.  As a simple example of this lets say you want to examine the contents
  318. of the 16 byte area at $40:$f0 (the ICA area). You could -
  319.  
  320.    type
  321.      ICA_Ptr = ^array[0..15] of byte;
  322.    var
  323.      B       : byte;
  324.      ICA     : ICA_Ptr;
  325.  
  326.     ICA := ptr($40,$f0);
  327.  
  328. Now ICA points to the address specified and you can dereference it -
  329.  
  330.     B := ICA^[10];
  331.  
  332. Hope that helps get you started into the complex world of memory management
  333. and manipulation using pointers.  There are countless permutations and methods
  334. that can be used.
  335.  
  336. TeeCee
  337.  
  338. --- TC-ED   v2.01  
  339.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  340.  * Tossed by SFToss/286 v1.02a on 92/12/09  12:56:05
  341.  
  342. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  343.  
  344. Conference 4
  345. Date       12-08-92 14:18:42
  346. From       Trevor Carlsen
  347. To         Brian Fleming
  348. Subject    Problem with delay
  349.  
  350.  
  351.  
  352.  BF> i need a DELAY feature that does not use DELAY (it is
  353.  BF> completely unreliable) but uses the time instead...
  354.  
  355. As you want to use the time, I presume that the maximum resolution of that
  356. method (about 55ms) is not a problem.  So here is a procedure...
  357.  
  358. procedure delay(t : word);
  359.   { Produces a machine independent delay of approximately (t * .055) seconds }
  360.  
  361.   var
  362.     time     : longint absolute $40:$6c;
  363.     start    : longint;
  364.     finished : boolean;
  365.   begin
  366.     start := time;
  367.     repeat
  368.       if time < start then    { midnight rollover occurred during the period }
  369.  
  370.         dec(start,$1800B0);
  371.       finished := (time > (start + t));
  372.     until finished;
  373.   end; { delay }
  374.  
  375. TeeCee
  376.  
  377.  
  378.  
  379.  
  380. --- TC-ED   v2.01  
  381.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  382.  * Tossed by SFToss/286 v1.02a on 92/12/09  12:56:05
  383.  
  384. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  385.  
  386. Conference 4
  387. Date       12-08-92 14:19:19
  388. From       Trevor Carlsen
  389. To         Joe Jared
  390. Subject    Help!
  391.  
  392.  
  393.  
  394.  TC> Never tamper with the value of a loop variable within a for
  395.  TC> loop. It can be done but is exceedingly poor practice and
  396.  TC> the problems it can create is illustrated above.
  397.  
  398.  JJ> In the above example, the above inserted line will 'break'
  399.  JJ> you out of the loop in much the same fashion as 'Goto
  400.  JJ> labelname' does for while do loops.
  401.  
  402. Yes, but that doesn't alter the fact that such technique is exceedingly PPP.
  403.  
  404. If such a statement is needed in a for loop, it simply indicates that the
  405. for loop was a bad structure choice in the first place.
  406.  
  407. TeeCee
  408.  
  409. --- TC-ED   v2.01  
  410.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  411.  * Tossed by SFToss/286 v1.02a on 92/12/09  12:56:05
  412.  
  413. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  414.  
  415. Conference 4
  416. Date       12-08-92 14:19:37
  417. From       Trevor Carlsen
  418. To         Brian Swanson
  419. Subject    Turning off screen
  420.  
  421.  
  422.  
  423.  > In many cases, depending on how the spawned
  424.  > programs do their i/o, you can pipe the output to Nul:
  425.  >   SwapVectors;
  426.  >   Exec (GetEnv('COMSPEC'),'/C CALLED >Nul');
  427.  >   SwapVectors;             ^^        ^^^^
  428.  
  429.  BS> Nope...I tried this already...The program still writes to
  430.  BS> the screen....
  431.  
  432. In that case you are SOL because it would appear that the child process is
  433. doing direct screen writes which are not redirectable.
  434.  
  435. TeeCee
  436.  
  437.  
  438. --- TC-ED   v2.01  
  439.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  440.  * Tossed by SFToss/286 v1.02a on 92/12/09  12:56:05
  441.  
  442. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  443.  
  444. Conference 4
  445. Date       12-08-92 14:20:01
  446. From       Trevor Carlsen
  447. To         Andrew Makiejewski
  448. Subject    how to get keys
  449.  
  450.  
  451.  
  452.  AM> I want to pass as a parameter to a procedure that will
  453.  AM> indicate what keypresses are valid. I am doing this already
  454.  AM> for regular keys, but I need to be able to list regular keys
  455.  AM> as well as extended key(mostly function keys).
  456.  
  457. It is this last requirement that makes things a little tricky.  Here is how
  458. I would do it.
  459.  
  460. Instead of using ReadKey use a little routine that returns a word when a key
  461. is pressed ...
  462.  
  463. function KeyWord : word; assembler;
  464.   { Returns a word value where the msb is the scan code of a keypress    }
  465.   { and the lsb is the asciiz value of the key.                          }
  466.   asm
  467.     mov  ax,0
  468.     int  16h
  469.   end;  { KeyWord }
  470.  
  471. Now you can do your validating based on the scan code.  However there is a
  472. catch here as well.  If you do not want a particular character from shifted
  473. keys etc then additional code is needed.
  474.  
  475. Generally speaking, I would think  a simple case statement is best. Have a
  476. look at the KEYINPUT.PAS file in TCSEL*.ARJ (available on PDN nodes) for an
  477. extensive example.  
  478.  
  479. TeeCee
  480.  
  481. --- TC-ED   v2.01  
  482.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  483.  * Tossed by SFToss/286 v1.02a on 92/12/09  12:56:05
  484.  
  485. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  486.  
  487. Conference 4
  488. Date       12-07-92 07:46:36
  489. From       Dj Murdoch
  490. To         Jakob Paikin
  491. Subject    Re: BP 7 Outline bug
  492.  
  493.   DM>       DisposeNode(ChildList);
  494.  DM>       DisposeNode(Next);
  495.  DM>       DisposeStr(Text);
  496.  DM>       Dispose(Node);
  497.  
  498.  JP> Is it intentional that you've left out the '<> Nil' checking?
  499.  
  500. You've misquoted me a bit.  The fragment above is from the DisposeNode procedure
  501.  it starts out as
  502.  
  503.   if Node <> nil then
  504.     with Node^ do
  505.     begin
  506.  
  507. Thus DisposeNode already has '<> Nil' checking in it.  So does DisposeStr.
  508.  So all that I've left out are redundant checks.  It might be slightly faster
  509. to leave them in and avoid the far calls, but the big cycle-eater here would
  510. be the actual disposal, so I tend to doubt that the difference would be noticeab
  511. e.
  512.  
  513. --- Msg V3.2
  514.  * Origin: Murdoch's_Point  - -   (1:249/99.5)
  515.  * Tossed by SFToss/286 v1.02a on 92/12/10  08:10:36
  516.  
  517. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  518.  
  519. Conference 4
  520. Date       12-07-92 20:33:25
  521. From       Dj Murdoch
  522. To         Matthew Warner
  523. Subject    Re: Turbo Date Advance...
  524.  
  525.   MW> Has anyone else encountered problems with programs written in Turbo Pascal
  526.  MW> not advancing the date at midnight?  We've tried it on our 
  527.  MW> XT and '386 with
  528.  MW> the same results.  Every now and then, the date on the 
  529.  MW> system clock will  not
  530.  MW> advance.  These programs -DO- poll the system clock almost constantly for
  531.  
  532.  MW> timing functions, but no SetDate/SetClock commands are issued.  Any ideas?
  533.  
  534. How are they polling the system clock?  If they don't use DOS, then a well-
  535. known DOS bug may be to blame:  if you don't ask DOS for the time for an entire
  536. day, it doesn't notice it.
  537.  
  538. --- Msg V3.2
  539.  * Origin: Murdoch's_Point  - -   (1:249/99.5)
  540.  * Tossed by SFToss/286 v1.02a on 92/12/10  08:10:36
  541.  
  542. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  543.  
  544. Conference 4
  545. Date       12-09-92 00:00:00
  546. From       Terry Hughes
  547. To         Greg Ryan
  548. Subject    B-tree question
  549.  
  550.  
  551. GR>TH> X QMPro 1.0 41-2187 X TurboPower Software (voice 719-260-9726)
  552. GR>Terry,
  553. GR>  This is your bbs number isn't it? Not voice
  554. GR>Greg
  555.  
  556. Whoops! You're absolutely right...must have happened a couple of weeks
  557. ago when I upgraded to the latest OLX. Thanks for pointing that out.
  558.  
  559. -Terry
  560.  
  561. ___
  562.  X QMPro 1.0 41-2187 X TurboPower Software (voice 719-260-6641)
  563.  
  564. --- Maximus 2.01wb
  565.  * Origin: The Programmers Playhouse (1:128/60)
  566.  * Tossed by SFToss/286 v1.02a on 92/12/10  23:25:07
  567.  
  568. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  569.  
  570. Conference 4
  571. Date       12-09-92 00:00:02
  572. From       Terry Hughes
  573. To         Greg Ryan
  574. Subject    multitasking
  575.  
  576.  
  577. GR>  has Turbo Power ever considered writing a multi-tasking library...i'd
  578. GR>  place my order today!
  579. GR>  There seem to be several for C and C++...however the only commercial
  580. GR>  mt'ing lib seems to be from a company in Germany (On-Time). Looks ok
  581. GR>  but is expensive and I don't feel like calling overseas for support
  582.  
  583. We've thought about it several times. So far, we keep ruling it out for
  584. the following reasons: too small market, high degree of difficulty
  585. in keeping it general enough for common use but robust enough to be
  586. usable, and the variety of alternative solutions (DV and Windows).
  587.  
  588. Every couple of months I see a small add for some new (or existing) TP
  589. multitasker in the back of Dr.Dobbs or Computer Language. I don't pay
  590. close enough attention to notice how many different ones there are but
  591. I'm sure there's at least 2 or 3 companies offering these things.
  592. You might want to browse through a few back issues of those magazines to
  593. see if you can't find something closer to home.
  594.  
  595. -Terry
  596.  
  597. ___
  598.  X QMPro 1.0 41-2187 X TurboPower Software (voice 719-260-6641)
  599.  
  600. --- Maximus 2.01wb
  601.  * Origin: The Programmers Playhouse (1:128/60)
  602.  * Tossed by SFToss/286 v1.02a on 92/12/10  23:25:07
  603.  
  604. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  605.  
  606. Conference 4
  607. Date       12-08-92 08:22:09
  608. From       Dj Murdoch
  609. To         Grischa Brockhaus
  610. Subject    Re: Cold Boot in program: ho
  611.  
  612.   DM> It's rather risky to reboot this way, now that people use caches that
  613.  DM> don't keep the disks up to date.  If you do, you'll 
  614.  GB> likely trash someone's
  615.  DM> disk. To do it right, you should do it in a way that 
  616.  GB> informs the cache
  617.  DM> that you're about to reboot.  I don't have any code for this.
  618.  
  619.  GB> But any idea, how to inform a cache ??
  620.  
  621. One idea I've heard of is to reset the disk.  Another is to fake a Ctrl-Alt-
  622. Del keypress (but of course that's for a warm boot).  Another is to insert
  623. a 5 second delay, since most caches will flush themselves in that time.
  624.  
  625.  
  626. --- Msg V3.2
  627.  * Origin: Murdoch's_Point  - -   (1:249/99.5)
  628.  * Tossed by SFToss/286 v1.02a on 92/12/10  23:25:10
  629.  
  630. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  631.  
  632. Conference 4
  633. Date       12-09-92 07:05:10
  634. From       Trevor Carlsen
  635. To         David Muench
  636. Subject    Swapper?
  637.  
  638.  
  639.  
  640.  DM> Does anyone have a unit or code that will replace (well, not
  641.  DM> really) the Exec command but will swap to EMS/XMS/Disk
  642.  DM> before executing the code?
  643.  
  644. I am not aware of any PD or shareware code for this but Turbo Power's Object
  645. Professional library certainly contains such a beast.  Top quality product
  646. this, good value and you get full source. Comes with about 1600+ pages documenta
  647. ion in 3 manuals and is recommended to any serious programmer.  Check out
  648. the computer mags for sources.
  649.  
  650. TeeCee
  651.  
  652. --- TC-ED   v2.01  
  653.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  654.  * Tossed by SFToss/286 v1.02a on 92/12/11  08:04:17
  655.  
  656. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  657.  
  658. Conference 4
  659. Date       12-09-92 07:09:23
  660. From       Trevor Carlsen
  661. To         Daniel Mecklenburg
  662. Subject    Real <--> float/double
  663.  
  664.  
  665.  
  666.  DM> I'm looking for either code in Pascal or C or the structures
  667.  DM> (bit wise) or algorythms for converting Pascal Reals to and
  668.  DM> from C's floats and doubles.
  669.  
  670. Turn on 8087 emulation and instead of Real, use the types that are the equivalen
  671.  -
  672.  
  673.     single
  674.     double.
  675.  
  676. So you can directly read a C float type into a TP single type. I might add
  677. that I have never actually tried this but reading the manuals would appear
  678. to indicate that it will work.
  679.  
  680. TeeCee
  681.  
  682.  
  683. --- TC-ED   v2.01  
  684.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  685.  * Tossed by SFToss/286 v1.02a on 92/12/11  08:04:17
  686.  
  687. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  688.  
  689. Conference 4
  690. Date       12-09-92 07:28:20
  691. From       Trevor Carlsen
  692. To         Derek Finlay
  693. Subject    Rounding real numbers??
  694.  
  695.  
  696.  
  697.  DF> Round_Off := Imperial_Weight * Decimal_Mover;
  698.  DF> Round (Round_Off : real);
  699.  DF> Imperial_Weight := Round_Off / Decimal_Mover;
  700.  
  701. Actually you are on the right track!  It just looks like you misunderstand
  702. how to use the round function.  In the second of the three above lines of
  703. code change the statement to -
  704.  
  705.       Round_Off := Round(Round_Off);
  706.  
  707. Actually the whole three lines could be expressed as -
  708.  
  709.   Imperial_Weight := round(Imperial_Weight * Decimal_Mover) / Decimal_Mover;
  710.  
  711. thus eliminating the need for the variable Round_Off.
  712.  
  713.  
  714. TeeCee
  715.  
  716. --- TC-ED   v2.01  
  717.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  718.  * Tossed by SFToss/286 v1.02a on 92/12/11  08:04:17
  719.  
  720. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  721.  
  722. Conference 4
  723. Date       12-09-92 09:17:33
  724. From       Trevor Carlsen
  725. To         All
  726. Subject    ECHOCOP
  727.  
  728.  
  729.  
  730. Echocop is temporarily off-line here for further development and modification. 
  731.  
  732.  
  733. Thanks to those "victims" who have responded so favourably and to those who
  734. have submitted positive criticisms along with suggestions as to how it could
  735. be improved. They have been noted and some, if not most, of those suggestions
  736. will be incorporated when it is next used.
  737.  
  738. And to those of you who don't know what the hell I am talking about - thanks
  739. for staying within the guidelines of this echo!
  740.  
  741. Moderator
  742.  
  743. --- TC-ED   v2.01  
  744.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  745.  * Tossed by SFToss/286 v1.02a on 92/12/11  08:04:17
  746.  
  747. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  748.  
  749. Conference 4
  750. Date       12-09-92 07:52:57
  751. From       Trevor Carlsen
  752. To         Mike Copeland
  753. Subject    Record Fields to Text File
  754.  
  755.  
  756.  
  757.  SM> I am trying to read in specific fields from a record and
  758.  SM> write them to a text file with no success. This is how I'm
  759.  SM> trying to do it:
  760.  
  761.  SM>  While Not EOF( recordfile ) do begin
  762.  SM>    read( recordfile, data )
  763.  SM>    With  data do begin
  764.  SM>      Write(textfile, field)
  765.  
  766.  SM> Is this even close or can it simply no be done?
  767.  
  768.  MC> It's pretty much off the mark, as you are combining the use
  769.  MC> of user-defined structures (with the "with") and text file
  770.  MC> processing, which need not use that concept.  In other
  771.  MC> words, it seems you are trying to intermix concepts you
  772.  MC> don't understand well.  8<}}
  773.  
  774. I think that you have misunderstood the question Mike; certainly your response
  775. would indicate that as it does not tie in with the request.  I see nothing
  776. wrong with what he is trying to do except that when writing to the text file
  777. he should probably be using writeln.
  778.  
  779. The lack of success is puzzling as the little code provided appears OK along
  780. with its logic.  The problem must lay in code away from what we have be shown.
  781.  
  782. TeeCee
  783.  
  784.  
  785.  
  786. --- TC-ED   v2.01  
  787.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  788.  * Tossed by SFToss/286 v1.02a on 92/12/11  08:04:17
  789.  
  790. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  791.  
  792. Conference 4
  793. Date       12-09-92 08:00:04
  794. From       Trevor Carlsen
  795. To         Steve McKain
  796. Subject    Record Fields to Text File
  797.  
  798.  
  799.  
  800.  SM> I am trying to read in specific fields from a record and
  801.  SM> write them to a text file with no success. This is how I'm
  802.  SM> trying to do it:
  803.  
  804.  SM>  While Not EOF( recordfile ) do begin
  805.  SM>    read( recordfile, data )
  806.  SM>    With  data do begin
  807.  SM>      Write(textfile, field)
  808.  
  809.  SM>  Is this even close or can it simply no be done?
  810.  
  811. You do not say what the "no success" is...
  812.  
  813. There is nothing wrong with the above code or the logic behind it although
  814. it may be that writeln would be better than the write for the textfile. However
  815. that would be dependent on the format you are trying to achieve in the textfile.
  816.  
  817. I also presume that "field" has indeed been defined as such somewhere or that
  818. you are using this as pseudo code for demonstrating what you are trying to do.
  819.  
  820.  
  821. Here is a little (untested) snippet based on what you are trying to do:
  822.  
  823. type
  824.   User_rec = record
  825.                FirstName,
  826.                LastName  : string[20];
  827.                Age       : byte;
  828.              end;
  829. var
  830.   TypedFile : file of User_rec;
  831.   TextFile  : text;
  832.   user      : User_rec;
  833.  
  834. begin
  835.   assign(TypedFile,'RecFile.dat');
  836.   reset(TypedFile);
  837.   assign(TextFile,'TextFile.txt');
  838.   rewrite(TextFile);
  839.   while not eof(TypedFile) do begin
  840.     read(TypedFile,user);
  841.     with user do
  842.       writeln(TextFile, LastName, ', ',FirstName,age:4);
  843.   end; { while }
  844.   close(TypedFile);
  845.   close(TextFile);
  846. end.
  847.  
  848. TeeCee
  849.  
  850. --- TC-ED   v2.01  
  851.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  852.  * Tossed by SFToss/286 v1.02a on 92/12/11  08:04:17
  853.  
  854. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  855.  
  856. Conference 4
  857. Date       12-09-92 08:17:09
  858. From       Trevor Carlsen
  859. To         Matthew Warner
  860. Subject    Turbo Date Advance...
  861.  
  862.  
  863.  
  864.  MW> Has anyone else encountered problems with programs written
  865.  MW> in Turbo Pascal not advancing the date at midnight?  We've
  866.  MW> tried it on our XT and '386
  867.  
  868. I believe that the problem is not confined to TP; it is a DOS problem rather
  869. than a TP one and is caused (I think) by an interrupt service you are using
  870. calling DOS for the time between the midnight rollover and the date change
  871. routine in DOS. C programs suffer the same problem.
  872.  
  873. The cure - as far as TP is concerned - is not to use any interrupt service
  874. for determining the time.  Calculate the time from the value stored at $40:$6c
  875. instead.
  876.  
  877. TeeCee
  878.  
  879.  
  880.  
  881. --- TC-ED   v2.01  
  882.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  883.  * Tossed by SFToss/286 v1.02a on 92/12/11  08:04:17
  884.  
  885. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  886.  
  887. Conference 4
  888. Date       12-09-92 08:27:13
  889. From       Trevor Carlsen
  890. To         Carl Russell
  891. Subject    Re: Os/2
  892.  
  893.  
  894.  
  895.  CR> In PC mag, Dvorak claims that August will be the earliest
  896.  CR> release date for Win NT...
  897.  
  898. The subject matter of the above message is unrelated to the subject matter
  899. of this echo.  Take the thread to netmail or cease posting.
  900.  
  901. If you wish to reply to this message do so by netmail only.
  902.  
  903. Moderator
  904.  
  905. --- TC-ED   v2.01  
  906.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  907.  * Tossed by SFToss/286 v1.02a on 92/12/11  08:04:17
  908.  
  909. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  910.  
  911. Conference 4
  912. Date       12-09-92 09:12:18
  913. From       Trevor Carlsen
  914. To         Martin Brewer @ 914/201
  915. Subject    Pascal
  916.  
  917.  
  918.  
  919.  MB> The way that I feel about it is, when you pay that kind of
  920.  MB> money for a school, your buying everything that that's
  921.  MB> inside the school.
  922.  
  923. That is naive, ridiculous and illegal. Software copied in that way is stolen
  924. - plain and simple - STOLEN.  If you had said you considered that after paying
  925. that kind of money you believed they should have provided you with a free
  926. LEGAL copy, I would have no complaints and would probably agree with you.
  927. However your feelings do not make something lawful - the law decides that.
  928. Your feelings would also not be considered in a court.
  929.  
  930. Take this thread to netmail if you wish to continue it.  Do not post any further
  931. messages on the subject in this echo.
  932.  
  933. Moderator
  934.  
  935. --- TC-ED   v2.01  
  936.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  937.  * Tossed by SFToss/286 v1.02a on 92/12/11  08:04:17
  938.  
  939. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  940.  
  941. Conference 4
  942. Date       12-09-92 08:56:48
  943. From       Trevor Carlsen
  944. To         Steve Connet
  945. Subject    Hot Key...
  946.  
  947.  
  948.  
  949.  SC> You know what I found out when playing with this is that
  950.  SC> MEM[$0:$0418] equals 2 when the left ALT key is pressed,
  951.  SC> regardless of any other key that is active.
  952.  
  953. Pressing left alt only sets bit 1 at that address.  If no other bits are set
  954. then the value will obviously be 2. However if other bits are set - caused
  955. by pressing NumLock, SysReq, CapsLock, Insert, Pause, ScrollLock or LeftCtrl
  956. at the same time as when you press LeftAlt then your value will not be 2.
  957.  For proof run this -
  958.  
  959. uses crt;
  960. var
  961.   keystate : byte absolute $40:$18;
  962. begin
  963.   clrscr;
  964.   repeat
  965.     gotoXY(1,1);
  966.     write(keystate:4);
  967.   until keystate > 127;
  968. end. 
  969.  
  970. Now while pressing left alt also press num lock or scroll lock or caps lock etc.
  971.  
  972. Program terminates by pressing the insert key.
  973.  
  974. TeeCee
  975.  
  976. --- TC-ED   v2.01  
  977.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  978.  * Tossed by SFToss/286 v1.02a on 92/12/11  08:04:17
  979.  
  980. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  981.  
  982. Conference 4
  983. Date       12-08-92 22:31:17
  984. From       Dj Murdoch
  985. To         Jason Huebel
  986. Subject    Re: borland pascal 7.0
  987.  
  988.   JH> Thanks for the reply, I wish TP were going to create 
  989.  JH> .OBJ's... But you can't win them all. :) I'm not going to 
  990.  JH> buy BP since it's a little outta my price range. But I 
  991.  JH> intend on getting TP 7.0 soon, so I won't be too far 
  992.  JH> behind everyone else. Again, Thanks for the reply.
  993.  
  994. One thing I didn't mention:  BP 7 can produce .DLLs, but TP 7 can't.
  995.  
  996. --- Msg V3.2
  997.  * Origin: Murdoch's_Point  - -   (1:249/99.5)
  998.  * Tossed by SFToss/286 v1.02a on 92/12/11  08:04:44
  999.  
  1000. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1001.  
  1002. Conference 4
  1003. Date       12-08-92 22:33:34
  1004. From       Dj Murdoch
  1005. To         Robert Roland
  1006. Subject    Re: v7.0 .TPU files
  1007.  
  1008.   >>JM    Recompiling from the original source is the only way.
  1009.  
  1010.  > That's what I was afraid of. :-(
  1011.  
  1012.  > Dave
  1013.  
  1014.  RR> Don't you think Borland should make an upgrade program for that? :)
  1015.  
  1016. They do - the compiler.  Just feed that old source code through it, and out
  1017. come the new .TPU files.  Don't have the source code?  Then throw out the
  1018. .TPU.  If it's not causing you trouble now, it'll cause you trouble later.
  1019.  
  1020. --- Msg V3.2
  1021.  * Origin: Murdoch's_Point  - -   (1:249/99.5)
  1022.  * Tossed by SFToss/286 v1.02a on 92/12/11  08:04:44
  1023.  
  1024. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1025.  
  1026. Conference 4
  1027. Date       12-08-92 22:31:11
  1028. From       Dj Murdoch
  1029. To         Jason Huebel
  1030. Subject    Re: borland pascal 7.0
  1031.  
  1032.   JH> Thanks for the reply, I wish TP were going to create 
  1033.  JH> .OBJ's... But you can't win them all. :) I'm not going to 
  1034.  JH> buy BP since it's a little outta my price range. But I 
  1035.  JH> intend on getting TP 7.0 soon, so I won't be too far 
  1036.  JH> behind everyone else. Again, Thanks for the reply.
  1037.  
  1038. One thing I didn't mention:  BP 7 can produce .DLLs, but TP 7 can't.
  1039.  
  1040. --- Msg V3.2
  1041.  * Origin: Murdoch's_Point  - -   (1:249/99.5)
  1042.  
  1043. --- FidoPCB v1.1 [FF014]
  1044.  * Origin: La. Medsig - A Medical BBS since 1983 - Harahan, La (1:396/28)
  1045.  * Tossed by SFToss/286 v1.02a on 92/12/12  08:07:22
  1046.  
  1047. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1048.  
  1049. Conference 4
  1050. Date       12-08-92 22:33:11
  1051. From       Dj Murdoch
  1052. To         Robert Roland
  1053. Subject    Re: v7.0 .TPU files
  1054.  
  1055.   >>JM    Recompiling from the original source is the only way.
  1056.  
  1057.  > That's what I was afraid of. :-(
  1058.  
  1059.  > Dave
  1060.  
  1061.  RR> Don't you think Borland should make an upgrade program for that? :)
  1062.  
  1063. They do - the compiler.  Just feed that old source code through it, and out
  1064. come the new .TPU files.  Don't have the source code?  Then throw out the .TPU.
  1065.  
  1066.  If it's not causing you trouble now, it'll cause you trouble later.
  1067.  
  1068. --- Msg V3.2
  1069.  * Origin: Murdoch's_Point  - -   (1:249/99.5)
  1070.  
  1071. --- FidoPCB v1.1 [FF014]
  1072.  * Origin: La. Medsig - A Medical BBS since 1983 - Harahan, La (1:396/28)
  1073.  * Tossed by SFToss/286 v1.02a on 92/12/12  08:07:22
  1074.  
  1075. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1076.  
  1077. Conference 4
  1078. Date       12-09-92 20:09:15
  1079. From       Dj Murdoch
  1080. To         Joe Jared
  1081. Subject    Re: Segment alignment
  1082.  
  1083.   JJ> The following practice will keep your heap^ segment 
  1084.  JJ> aligned, which will make Basm, as well as inline coding 
  1085.  JJ> much simpler when programming with Turbo Pascal.  
  1086.  JJ> Hopefully someday Borland will drop the :8 address and 
  1087.  JJ> just give us a Segment per allocation, as it would make 
  1088.  JJ> everyone's life much easier, and eliminate the most 
  1089.  JJ> irritating bug in their software, and expand the capacity 
  1090.  JJ> of heap alignment to 65535 bytes.  
  1091.  
  1092. Just use MemAllocSeg if you want to allocate a segment aligned pointer.  It's
  1093. in the Memory unit in TP 6 or 7.  Borland gave it to you, you just didn't
  1094. notice.
  1095.  
  1096.  
  1097. --- Msg V3.2
  1098.  * Origin: Murdoch's_Point  - -   (1:249/99.5)
  1099.  * Tossed by SFToss/286 v1.02a on 92/12/12  08:07:51
  1100.  
  1101. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1102.  
  1103. Conference 4
  1104. Date       12-09-92 20:12:50
  1105. From       Dj Murdoch
  1106. To         Christian Brem
  1107. Subject    Re: BP 7.0 and Turbo Vision
  1108.  
  1109.   CB> I have heard, that in TP 7.0 there will be no Turbo Vision 
  1110.  CB> but something similar and compatible to Windows (?).
  1111.  CB> Is this true -have I to rewrite all Programms developed in 
  1112.  CB> TP 6.0 using Turbo Vision ?
  1113.  
  1114. No, you get an updated version of Turbo Vision.  I haven't noticed any incompati
  1115. ilities with the old one, but I'm sure there are a few hiding in there.
  1116.  
  1117. --- Msg V3.2
  1118.  * Origin: Murdoch's_Point  - -   (1:249/99.5)
  1119.  * Tossed by SFToss/286 v1.02a on 92/12/12  08:07:51
  1120.  
  1121. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1122.  
  1123. Conference 4
  1124. Date       12-09-92 21:15:11
  1125. From       Dj Murdoch
  1126. To         Bob Swart
  1127. Subject    Re: Strange Behaviour of Redirection, or
  1128.  
  1129.   BS> I just noticed a strange behaviour of redirection with 
  1130.  BS> Turbo Pascal 6.0 (but maybe it's just my old head that needs some rest :).
  1131.  
  1132.  
  1133.  BS> The program below demonstrates the 'feature':
  1134.  
  1135.  BS> var f: Text;
  1136.  BS> begin
  1137.  BS>   writeln('1. Usage: BUG [>output]');
  1138.  BS>   Assign(f,'');  {stdout}
  1139.  BS>   rewrite(f);
  1140.  BS>   writeln(f,'2. This can be redirected.');
  1141.  BS>   close(f);
  1142.  BS>   writeln('3. last line');
  1143.  BS> end.
  1144.  
  1145. That's a pretty strange thing to be doing in a program -- it's not a good
  1146. idea to have two text variables attached to the same file.  In your particular
  1147. case, you get the strange output because of a couple of things interacting: 
  1148.  
  1149.  
  1150.   1.  TP buffers text files, and only writes things when the buffer (usually
  1151.       128) bytes is full, or you flush or close the file.
  1152.   2.  TP doesn't buffer writes to the console; or rather it acts as though the 
  1153.  
  1154.       buffer size is 1.
  1155.  
  1156. So when your program is not redirected, rule 2 means that all I/O shows up
  1157. in the expected order.  When you do redirection, here's what happens:
  1158.  
  1159.   1.  The first writeln goes into the buffer in the Output variable.
  1160.   2.  The second writeln goes into the buffer in the  f  variable.
  1161.   3.  Close(f) forces  f  to be flushed, which makes line 2 show up.
  1162.   4.  The last writeln goes into the Output buffer.
  1163.   5.  The end of your program closes Output, and lines 1 and 2 get flushed. 
  1164.  
  1165.  
  1166. --- Msg V3.2
  1167.  * Origin: Murdoch's_Point  - -   (1:249/99.5)
  1168.  * Tossed by SFToss/286 v1.02a on 92/12/12  08:07:51
  1169.  
  1170. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1171.  
  1172. Conference 4
  1173. Date       12-09-92 21:23:52
  1174. From       Dj Murdoch
  1175. To         Max Maischein
  1176. Subject    Re: Debug data format / Map file convers
  1177.  
  1178.   MM> Does anybody have a documentation for the debug data 
  1179.  MM> tacked at the end of each .EXE file under TP ( if $D+ 
  1180.  MM> specified in the source ) ?
  1181.  
  1182. It's described in the "Open Architecture" book that came with (or was optional
  1183. with) BC++ 3.1.  I've heard that a BP specific version is planned, but I haven't
  1184. heard a publication date.
  1185.  
  1186.  
  1187.  
  1188. --- Msg V3.2
  1189.  * Origin: Murdoch's_Point  - -   (1:249/99.5)
  1190.  * Tossed by SFToss/286 v1.02a on 92/12/12  08:07:51
  1191.  
  1192. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1193.  
  1194. Conference 4
  1195. Date       12-12-92 06:53:00
  1196. From       Trevor Carlsen
  1197. To         Larry Edwards
  1198. Subject    Single List Help
  1199.  
  1200.  
  1201.  
  1202.  LE> ...Right now I do something like "DIR>>Dir.Txt", then I go
  1203.  LE> into that file and extract the file names and extensions,
  1204.  LE> and write them out to another file. What I would like to do
  1205.  LE> is something like using a Single List to keep the contents
  1206.  LE> of the directory in memory and use that later in the
  1207.  LE> program. The only part I am interested in is the file name
  1208.  LE> and extension. I know using FindFirst and FindNext will pull
  1209.  LE> the file names but that is where I run out of knowledge. The
  1210.  LE> Big problem I see is that I do not know the number of files
  1211.  LE> in a directory, so I can't use an Array, that brings me to a
  1212.  LE> Single List.
  1213.  
  1214. I *would* use an array for what you are doing, although a linked list would
  1215. also be quite valid here if memory was really tight or no further manipulation
  1216. or random access of the data is needed.  However it would be an array of pointer
  1217.  and the actual names can be dynamically stored.  That way you can manipulate
  1218. (sort) the list to your heart's content.  The file TCSEL*.*  (available PDN
  1219. nodes) contains a simple directory program that may help you a little but
  1220. here is a brief (untested) example of what I mean.
  1221.  
  1222. uses
  1223.   dos;
  1224.  
  1225. const
  1226.   MaxFiles = 1000; { Alter to suit }
  1227.  
  1228. type
  1229.   FName    = string[12];
  1230.   FNPtr    = ^FName;
  1231.   FPList   = array[1..MaxFiles] of FNPtr;
  1232.  
  1233. var
  1234.   dirInfo  : SearchRec;
  1235.   list     : FPList;
  1236.   fileName : FName;
  1237.   NumbFiles,
  1238.   count    : word;
  1239.  
  1240. begin
  1241.   { First initialise the array of pointers to Nil }
  1242.   FillChar(list, sizeof(list), 0);
  1243.  
  1244.   NumbFiles := 0;
  1245.   count     := 0;
  1246.  
  1247.   FindFirst('*.*',AnyFile,dirInfo);
  1248.   while DosError = 0 do begin
  1249.  
  1250.     { Filter out directories etc }
  1251.     if ($18 and dirInfo.Attr) = 0 then begin
  1252.  
  1253.       { Allocate memory for the name and extension }
  1254.       inc(NumbFiles);
  1255.       new(list[NumbFiles]);
  1256.  
  1257.       { assign the name to the list element }
  1258.       list[NumbFiles]^ := dirInfo.Name;
  1259.  
  1260.     end; { if ... }
  1261.     FindNext(dirInfo);
  1262.   end; { while DosError ... }
  1263.  
  1264.   { Display the list of names }
  1265.   if NumbFiles <> 0 then repeat
  1266.     inc(count);
  1267.     writeln(list[count]^);
  1268.   until count = NumbFiles;
  1269.  
  1270. end.
  1271.  
  1272. If you compile and run that and I haven't made any stuff-ups :-), it will
  1273. display all the file names in the current directory.
  1274.  
  1275.  
  1276. TeeCee
  1277.  
  1278.  
  1279. --- TC-ED   v2.01  
  1280.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  1281.  * Tossed by SFToss/286 v1.02a on 92/12/12  17:51:26
  1282.  
  1283. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1284.  
  1285. Conference 4
  1286. Date       12-12-92 06:46:00
  1287. From       Trevor Carlsen
  1288. To         Steve Connet
  1289. Subject    Screen memory
  1290.  
  1291.  
  1292.  
  1293.  SC> ... And I intently read the short tutorial on pointers you
  1294.  SC> gave to Todd Blair.  I do not completely understand it but I
  1295.  SC> think I have a fair enough understanding of it to work with
  1296.  SC> it.
  1297.  
  1298. You have just completely destroyed my ego! :-)  I tried very hard to make
  1299. that a very fundamental and easy-to-understand explanation. Oh well, back
  1300. to the drawing board...
  1301.  
  1302.  SC> However, I still have somewhat of a phobia with "Linked
  1303.  SC> Lists."...
  1304.  
  1305. Linked lists are a reasonably complex subject. I firmly believe that they
  1306. are "overused" and that this overuse comes about because in classes the demonstr
  1307. tions of their use often use applications that are not necessarily ideal for
  1308. the technique - just convenient and simple.  Don't get me wrong, linked lists
  1309. and the familiarity with the techniques involved in their use are a vital
  1310. part of programming skills.  Just don't get the idea that they are the only
  1311. use there is for pointers!
  1312.  
  1313.  SC> ... Say I have a record with a name, address, and a linker
  1314.  SC> to point to the next record.  Do I have to use the NEW
  1315.  SC> procedure to expand the linked list (to add new records)?
  1316.  
  1317. Yes you do.  Everytime you wish to expand a linked list the last pointer in
  1318. the link needs a new valid address to the record you are adding to the list
  1319. and that new record needs memory to be reserved for it to reside in. This
  1320. memory must be allocated and the "linker" given its address by the new() procedu
  1321. e (although in TP there is another procedure - GetMem - as well.  I would
  1322. not worry about that though until you have the concepts of pointers, linked
  1323. lists and the like down pat.).
  1324.  
  1325. TeeCee
  1326.  
  1327. --- TC-ED   v2.01  
  1328.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  1329.  * Tossed by SFToss/286 v1.02a on 92/12/12  17:51:26
  1330.  
  1331. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1332.  
  1333. Conference 4
  1334. Date       12-12-92 07:05:00
  1335. From       Trevor Carlsen
  1336. To         Tom Lawrence
  1337. Subject    Fast Direct screen writess
  1338.  
  1339.  
  1340.  
  1341.  > the only fast way to achieve this is to go into asm and doing the
  1342.  > thing directly. Pascal uses the BIOS to output the text, so it is
  1343.  > SLOW.
  1344.  
  1345.  TL>     Not true.  Turbo Pascal, by default, writes directly to VIDRAM, 
  1346.  TL> bypassing BIOS writes.  You can force it to write to BIOS by setting 
  1347.  
  1348.  TL> DirectVideo to FALSE.
  1349.  
  1350. By default Turbo Pascal uses DOS to do all its screen writing - it does NOT
  1351. write directly to the VIDRAM.  However...
  1352.  
  1353. If the CRT unit is used then your statement is correct.
  1354.  
  1355. TeeCee
  1356.  
  1357.  
  1358.  
  1359. --- TC-ED   v2.01  
  1360.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  1361.  * Tossed by SFToss/286 v1.02a on 92/12/12  17:51:26
  1362.  
  1363. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1364.  
  1365. Conference 4
  1366. Date       12-12-92 07:16:00
  1367. From       Trevor Carlsen
  1368. To         Rainier van.Slingerlandt
  1369. Subject    Word-Wrap !!
  1370.  
  1371.  
  1372.  
  1373.  Rv> Is there someone out there that has a routine for using word-wrap
  1374.  
  1375. This qualifies as a FAQ and the following answer is being added to the A2FAPQ
  1376. file in TCSEL003.* uploaded to PDN today.
  1377.  
  1378. Here is a program that demonstrates both word wrap and justifying. 
  1379.  
  1380. var
  1381.   S : string;
  1382.  
  1383. function Wrap(var st: string; maxlen: byte; justify: boolean): string;
  1384.   { returns a string of no more than maxlen characters with the last   }
  1385.   { character being the last space before maxlen. On return st now has }
  1386.   { the remaining characters left after the wrapping.                  }
  1387.   const
  1388.     space = #32;
  1389.   var 
  1390.     len      : byte absolute st;
  1391.     x,
  1392.     oldlen,
  1393.     newlen   : byte;
  1394.  
  1395.   function JustifiedStr(s: string; max: byte): string;
  1396.  
  1397.     { Justifies string s left and right to length max. If there is more }
  1398.     { than one trailing space, only the right most space is deleted. The}
  1399.     { remaining spaces are considered "hard".  #255 is used as the char }
  1400.     { used for padding purposes. This will enable easy removal in any   }
  1401.     { editor routine.                                                   }
  1402.  
  1403.     const
  1404.       softSpace = #255;
  1405.     var
  1406.       jstr      : string;
  1407.       len       : byte absolute jstr;
  1408.     begin
  1409.       jstr := s;
  1410.       while (jstr[1] = space) and (len > 0) do   { delete all leading spaces }
  1411.  
  1412.         delete(jstr,1,1);
  1413.       if jstr[len] = space then
  1414.         dec(len);                                { Get rid of trailing space }
  1415.  
  1416.       if not ((len = max) or (len = 0)) then begin
  1417.         x := pos('.',jstr);     { Attempt to start padding at sentence break }
  1418.  
  1419.         if (x = 0) or (x =len) then       { no period or period is at length }
  1420.  
  1421.           x := 1;                                    { so start at beginning }
  1422.  
  1423.         if pos(space,jstr) <> 0 then repeat        { ensure at least 1 space }
  1424.  
  1425.           if jstr[x] = space then                      { so add a soft space }
  1426.  
  1427.             insert(softSpace,jstr,x+1);
  1428.           x := succ(x mod len);  { if eoln is reached return and do it again }
  1429.  
  1430.         until len = max;        { until the wanted string length is achieved }
  1431.  
  1432.       end; { if not ... }
  1433.       JustifiedStr := jstr;
  1434.     end; { JustifiedStr }
  1435.  
  1436.  
  1437.   begin  { Wrap }
  1438.     if len <= maxlen then begin                       { no wrapping required }
  1439.  
  1440.       Wrap := st;
  1441.       len  := 0;
  1442.     end else begin
  1443.       oldlen := len;                { save the length of the original string }
  1444.  
  1445.       len    := succ(maxlen);                        { set length to maximum }
  1446.  
  1447.       repeat                     { find last space in st before or at maxlen }
  1448.  
  1449.         dec(len);
  1450.       until (st[len] = space) or (len = 0);
  1451.       if len = 0 then                   { no spaces in st, so chop at maxlen }
  1452.  
  1453.         len := maxlen;
  1454.       if justify then
  1455.         Wrap := JustifiedStr(st,maxlen)
  1456.       else
  1457.         Wrap := st;
  1458.       newlen :=  len;          { save the length of the newly wrapped string }
  1459.  
  1460.       len := oldlen;              { and restore it to original length before }
  1461.  
  1462.       Delete(st,1,newlen);              { getting rid of the wrapped portion }
  1463.  
  1464.     end;
  1465.   end; { Wrap }
  1466.  
  1467. begin
  1468.   S :=
  1469. 'By far the easiest way to manage a database is to create an '+
  1470. 'index file. An index file can take many forms and its size will depend '+
  1471. 'upon how many records you want in the db. The routines that follow '+
  1472. 'assume no more than 32760 records.';
  1473.  
  1474. while length(S) <> 0 do
  1475.   writeln(Wrap(S,60,true));
  1476. end.
  1477.  
  1478. Whilst this is tested and known to work on the example string, no further 
  1479.  
  1480. testing than that has been done.  I suggest you test it a great deal more 
  1481.  
  1482. before being satisfied that it is OK.  
  1483.  
  1484. TeeCee
  1485.  
  1486. --- TC-ED   v2.01  
  1487.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  1488.  * Tossed by SFToss/286 v1.02a on 92/12/12  17:51:26
  1489.  
  1490. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1491.  
  1492. Conference 4
  1493. Date       12-12-92 10:39:00
  1494. From       Trevor Carlsen
  1495. To         Brandon Jones
  1496. Subject    Os/2
  1497.  
  1498.  
  1499.  
  1500.  BJ> Yeah I have the OS/2 beta 
  1501.  
  1502. I have previously requested several times that this thread be moved to an
  1503. appropriate area.  This conference is for discussing Pascal - not OS/2, DOS
  1504. or any operating system.  Consider this to be a final warning.
  1505.  
  1506. If you wish to reply to this message do so by netmail only.
  1507.  
  1508. Moderator.
  1509.  
  1510. --- TC-ED   v2.01  
  1511.  * Origin: The Pilbara's Pascal Centre (+61 91 732930) (3:690/644)
  1512.  * Tossed by SFToss/286 v1.02a on 92/12/12  17:51:26
  1513.  
  1514. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1515.  
  1516. Conference 4
  1517. Date       12-10-92 08:04:00
  1518. From       Dj Murdoch
  1519. To         Mike Copeland
  1520. Subject    Re: Array of Pointers
  1521.  
  1522.   MC> used: TP6.0+ operates differently that TP5.5-.  That's 
  1523.  MC> because TP6.0 allocates memory in mod-16 byte chuncks - so 
  1524.  MC> allocating 9 bytes for the String[8] would truly _use_ 16 
  1525.  MC> bytes of the Heap, which would be a terrible waste in this 
  1526.  MC> specific case.  TP5.5- allocates just the 9 bytes.
  1527.  
  1528. Actually, TP6+ uses mod 8 chunks - but the effect is the same. Seven bytes
  1529. get wasted in this allocation.  However, there's a big advantage to the TP
  1530. 3/6+ scheme over the 4/5.x scheme.  A deallocation is guaranteed to increase
  1531. free space, and it's guaranteed to succeed.  If you call Dispose in 4/5.x
  1532. and create a new block of free heap space, the heap manager has to allocate
  1533. a new 8 byte record to describe it.  If it can't do that, you get a "heap
  1534. overflow" error on a *de*allocation.  In the current scheme, the record is
  1535. stored in the space that was just freed up, which is guaranteed to be at least
  1536. 8 bytes.
  1537.  
  1538. --- Msg V3.2
  1539.  * Origin: Murdoch's_Point  - -   (1:249/99.5)
  1540.  * Tossed by SFToss/286 v1.02a on 92/12/12  17:51:38
  1541.  
  1542. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1543.  
  1544. Conference 4
  1545. Date       12-10-92 08:10:00
  1546. From       Dj Murdoch
  1547. To         Trevor Carlsen
  1548. Subject    Re: Turbo Date Advance...
  1549.  
  1550.   TC> The cure - as far as TP is concerned - is not to use any 
  1551.  TC> interrupt service for determining the time.  Calculate the 
  1552.  TC> time from the value stored at $40:$6c instead.
  1553.  
  1554. That just gives you the time of day, not the date.  The BIOS doesn't keep
  1555. track of the date (except in the real-time clock, which is rather slow to
  1556. query, and a flag to indicate that midnight has been passed at least once).
  1557.  As long as you ask DOS for the time at least once a day, it keeps the date
  1558. updated correctly. 
  1559.  
  1560. --- Msg V3.2
  1561.  * Origin: Murdoch's_Point  - -   (1:249/99.5)
  1562.  * Tossed by SFToss/286 v1.02a on 92/12/12  17:51:38
  1563.  
  1564. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1565.  
  1566. Conference 4
  1567. Date       12-10-92 08:16:00
  1568. From       Dj Murdoch
  1569. To         Nathan Wambach
  1570. Subject    Re: pascal uncompileer
  1571.  
  1572.   NW>         Which leads ME (my opinion) to believe that you can then convert
  1573.  NW> the ASM into PAS...  Wouldn't be easy, and you sure wouldn't get the
  1574.  NW> exact same code as the writer uses...  but I think it would work...
  1575.  NW> After all, you can use ASM in Pascal...  Who knows?  They would never
  1576.  NW> release a program to covert EXE/COM to PAS!  (again, my opinion)
  1577.  
  1578. Of course you can convert the assembler into Pascal, but it wouldn't be any
  1579. more informative than the assembler was.  Which do you find clearer:
  1580.  
  1581. The original program:
  1582.  
  1583. const
  1584.   screenwidth=80;
  1585.   screenheight=24; var
  1586.   x,y:byte;
  1587.   vscreen : array[1..24,1..80] of word; begin
  1588.   vscreen[10,20] := 0; end.
  1589.  
  1590. The disassembly:
  1591.  
  1592.   0000:0000 9A00000200      CALL    0002:0000
  1593.   0000:0005 55              PUSH    BP
  1594.   0000:0006 89E5            MOV     BP,SP
  1595.   0000:0008 31C0            XOR     AX,AX
  1596.   0000:000A 9ACD020200      CALL    0002:02CD
  1597.   0000:000F 31C0            XOR     AX,AX
  1598.   0000:0011 A31806          MOV     [DS: 0618],AX
  1599.   0000:0014 C9              LEAVE
  1600.   0000:0015 31C0            XOR     AX,AX
  1601.   0000:0017 9A16010200      CALL    0002:0116
  1602.  
  1603. Or equivalent Pascal:
  1604.  
  1605. var
  1606.   words : array[0..32760] of word; begin
  1607.   words[$30C] := 0; end.
  1608.  
  1609. What all you decompiler-boosters are missing is the fact that a program tells
  1610. the programmer far more than it tells the CPU. If you look at the .EXE, all
  1611. you see is what it tells the CPU to do.  You don't get told why.
  1612.  
  1613.  
  1614. --- Msg V3.2
  1615.  * Origin: Murdoch's_Point  - -   (1:249/99.5)
  1616.  * Tossed by SFToss/286 v1.02a on 92/12/12  17:51:38
  1617.